//
//  LWStatusViewModel.swift
//  LW_Weibo
//
//  Created by 刘伟 on 16/7/13.
//  Copyright © 2016年 LWSpro. All rights reserved.
//

import UIKit


//这个工具类  主要是负责cell的
class LWStatusViewModel: NSObject {
    
    //赋值属性
    var status: LWStatus?
    
    //定义三个属性  目的是为了个转发等三个按钮的title赋值 而三个按钮的逻辑  我们可以写在这三个属性中 也就是说,这三个属性一出来就带有三个按钮的判断逻辑  这样我们给按钮的title赋值时,逻辑也同样带过去了 
    //既然是给title赋值  那么三个属性的类型就是String类型 并且我们要保证三个属性是有值的  那么只有当LWStatusViewModel 一创建出来 就有值  和模型一样(模型中的属性要有值  都是网络返回的字典转换成相应的属性  那么这里 我们也仿照，让网络将模型传给LWStatusViewModel的时候,就让这三个属性有值)  也即是我们要把这三个属性也存入到LWStatusListViewModel 的数组中  这样我们从数组中拿到LWStatusViewModel  那也就拿到了这三个属性 所以放在init中给这三个属性赋值 因为外界就是走的init方法才给LWStatusViewModel 的 status 属性赋值的
    
    //  转发数显示内容
    var retweetStr: String?
    //  评论数显示内容
    var commentStr: String?
    //  赞数显示内容
    var unlikeStr: String?
    
    
    //转发微博的内容
    var retweetContent: String?
    
    //会员等级图片
    var vipMbrankImage: UIImage?
    
    //原创微博的来源
    var sourceContent: String?
    
    //认证等级图片
    var verified_typeImage: UIImage?
    
    
    //时间属性 使用只读属性,因为我们只需要取值 不需要赋值  即get方法  可以省略  get
    
    var timeStr: String? { //防止为nil  用可选
        
        //计算时间的逻辑 我们可以抽取到 NSDate+Extension 分类中  因为所有的都是在计算NSDate  最后我们只需在NSDate+Extension 中也添加一个只读属性 在赋值给我们的这个只读属性
        
        guard let creatTimeStr = self.status?.created_at else {
            
            
            return nil
            
        }
        
        
        //返回字符串
        return NSDate.sinaDate(creatTimeStr).timeString
        
        
    }
    
    
    
    
    
    
    
    
    init(status: LWStatus) {  //这一步是最先开始的  因为一创建对象就会调用这个方法 而属性只有在对象存在的时候才能调用
        
        super.init()
        
        self.status = status //对象一创建 就给 status属性赋值了,其他属性都可以根据status 获得值 并不一定要写在这个方法中  只要status有值了 都可以给其他属性赋值
        
        //给三个属性赋值  这三个属性就包含了按钮的判断逻辑  拿到这三个属性也就拿到了逻辑判断 因为会走逻辑判断方法
        retweetStr = handleCount(status.reposts_count, defaultTitle: "转发")
        
        commentStr = handleCount(status.comments_count, defaultTitle: "评论")
        
        unlikeStr = handleCount(status.attitudes_count, defaultTitle: "赞")
        
        
        
        //这个方法里面已经为retweetContent的赋值了
        handleRetweetContent(status)
        
        //会员等级图片赋值
        handleImageMbrank(status.user?.mbrank ?? 0)
        
        
        //来源 防止为nil而不能解包
        handleSourceContent(status.source ?? "")
        
        //认证等级
        handleVerified_typeImage(status.user?.verified_type ?? 0)
        
        
        
        
    }
    
    
    
    
    //MARK: - 认证等级图片
    private func handleVerified_typeImage(verified_type: Int) {
        
        //  认证类型等级 认证类型 -1 没有认证 ，0 认证用户，2，3，5 企业认证 ， 220 达人
        
        switch verified_type {
            
        case 0:
            
            //  认证用户
            verified_typeImage = UIImage(named: "avatar_vip")
            
        case 2,3,5:
            
            //企业认证
            verified_typeImage = UIImage(named: "avatar_enterprise_vip")
            
        case 220:
            
            //  微博达人
            verified_typeImage = UIImage(named: "avatar_grassroot")
            
        default:
            
            verified_typeImage = nil
            
        }
        

        
    }
    
    
    
    //MARK: - 原创微博来源 - 用户的
    private func handleSourceContent(source: String) {
        
        // '\'反斜杠是为了让""两个引号区分开 判断 "> 和 </ 的范围
        guard let range1 = source.rangeOfString("\">"), let range2 = source.rangeOfString("</") else {
            
            
            return
            
            
        }
        
        
        //这里 范围肯定存在了
        
        //开始光标的位置
        let startIndex = range1.endIndex
        
        //结束光标的位置
        let endIndex = range2.startIndex
        
        
        
        //截取字符串
        sourceContent = "来自" + source.substringWithRange(startIndex..<endIndex)
        
        
    }
    
    
    
    
    
    //MARK: - 会员等级
    private func handleImageMbrank(mbrank: Int) {
        
        if mbrank > 0 && mbrank < 7 {
        
        let mbrankImage = UIImage(named: "common_icon_membership_level\(mbrank)")
            
            
            vipMbrankImage = mbrankImage
        
        }
        
        
    }
    
    
    
    //MARK: - 转发等三个按钮的逻辑
    private func handleCount(count: Int, defaultTitle: String) -> String {
        
        if count > 0 {
            
            if count >= 10000 { //如果大于10000
                
                let result = Float(count / 1000) / 10
                
                var resultStr = "\(result)万"
                
                //如果刚好整除 那么不让显示.0
                if resultStr.containsString(".0") {//如果包含.0  那么就将.0去掉
                    
                    resultStr = resultStr.stringByReplacingOccurrencesOfString(".0", withString: "")
                    
                    
                    
                }
                
                
                return resultStr
                
                
            }else {//不到10000
                
                return "\(count)"
                
            }
            
            
            
            
        } else { //如果数目等于0 那么就直接显示当前文字
            
            
            return defaultTitle

        }
        
    }
    
    
    
    private func handleRetweetContent(status: LWStatus) {
        
        //如果转发微博的这个键所对应的值(值就是字典)有内容  那么说明有转发微博
        if status.retweeted_status != nil { //如果有转发微博
            
            //获取用户名
            guard let userName = status.retweeted_status?.user?.screen_name, contentText = status.retweeted_status?.text else {
                
                
                return
                
                
                
            }
            
            
            
            retweetContent = "@\(userName):\(contentText)"
            
            
        }
 
    }
    
    
    
    
   
    
    
    

}
